/**
 * 
 */
package edu.erpan.web.materiaPrima;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import edu.erpan.bl.entities.MateriaPrima;
import edu.erpan.bl.entities.Opcion;
import edu.erpan.fachada.IMateriaPrimaFachada;
import edu.erpan.fachada.MateriaPrimaFachada;
import edu.erpan.util.entityManager.exceptions.IdNotFoundException;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;
import edu.erpan.web.util.Recursos;

/**
 * @author Jeison
 *
 */
public class MateriaPrimaBean implements Serializable {

	
	/**
	 * @author Jeison
	 * @date 12/06/2013
	 */
	private static final long serialVersionUID = -4793723428814125630L;
	/**
	 * 
	 */
	private MateriaPrima materiaPrima;
	/**
	 * 
	 */
	private List<MateriaPrima>listaMateriasPrimas;
	
	private List<SelectItem>itemsTiposMasa;
	
	private boolean editandoMateriaPrima;
	/**
	 * 
	 */
	public MateriaPrimaBean() {
		// TODO Auto-generated constructor stub
		this.materiaPrima=new MateriaPrima();
		
		consultarMateriasPrimas();
		conssultarUnidadesDeMedida();
	}
	
	
	public void guardarMateriaPrima(ActionEvent evento){
		try {
			if(validarMateriaPrima(this.materiaPrima)){
				IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
				materiaPrimaFachada.guardarMateriaPrima(this.materiaPrima);
				consultarMateriasPrimas();
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GUARDADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void seleccionarMateriaPrimaEditar(ActionEvent evento){
		Integer idMateriaPrima=(Integer) evento.getComponent().getAttributes().get("idMateriaPrima");
		IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
		
		try {
			
			MateriaPrima materiaPrima=new MateriaPrima();
			materiaPrima.setIdmateriaPrima(idMateriaPrima);
			this.materiaPrima=materiaPrimaFachada.consultarMateriaPrima(materiaPrima);
			editandoMateriaPrima=true;
		} catch (QueryException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_SELECCION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (IdNotFoundException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_SELECCION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}
	}
	
	public void editarMateriaPrima(ActionEvent evento){
		try {
			if(validarMateriaPrima(this.materiaPrima)){
				IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
				materiaPrimaFachada.editarMateriaPrima(this.materiaPrima);
				consultarMateriasPrimas();
			}
		}  catch (QueryException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_EDICION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (IdNotFoundException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_EDICION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void eliminarMateriaPrima(ActionEvent evento) {
		Integer idMateriaPrima=(Integer) evento.getComponent().getAttributes().get("idMateriaPrima");
		IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
		try {
			MateriaPrima materiaPrima=new MateriaPrima();
			materiaPrima.setIdmateriaPrima(idMateriaPrima);
			//this.materiaPrima=materiaPrimaFachada.consultarMateriaPrima(materiaPrima);
			
			materiaPrimaFachada.eliminarMateriaPrima(materiaPrima);
			
			if(this.materiaPrima.getIdmateriaPrima()!=null&&this.materiaPrima.getIdmateriaPrima().intValue()==idMateriaPrima){
				this.editandoMateriaPrima=false;
			}
			consultarMateriasPrimas();
		} catch (QueryException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_ELIMINAR);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (IdNotFoundException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIA_PRIMA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_ELIMINAR);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}
	}
	
	public void cancelarEdicionMateriaPrima(ActionEvent evento){
		this.materiaPrima=new MateriaPrima();
		editandoMateriaPrima=false;
	}
	
	private boolean validarMateriaPrima(MateriaPrima materiaPrima){
		boolean cumple=true;
		String mensaje = Recursos.getInstance().getMensaje("campo.obligatorio");
		String nombreCampo="";
		if(materiaPrima.getReferencia()==null||materiaPrima.getReferencia().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("materiaPrima.referencia");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(materiaPrima.getNombre()==null||materiaPrima.getNombre().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("materiaPrima.nombre");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(materiaPrima.getPresentacion()==null||materiaPrima.getPresentacion().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("materiaPrima.presentacion");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(materiaPrima.getPrecio()==null||materiaPrima.getPrecio().doubleValue()<=0){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("materiaPrima.precioPromedio");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(materiaPrima.getPeso()==null||materiaPrima.getPeso().doubleValue()<=0){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("materiaPrima.peso");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		return cumple;
	}
	
	
	public void conssultarUnidadesDeMedida(){
		IMateriaPrimaFachada iMateriaPrimaFachada=new MateriaPrimaFachada();
		try {
			this.itemsTiposMasa=new ArrayList<SelectItem>(0);
			List<Opcion>opciones=iMateriaPrimaFachada.consultarUnidadesDeMedida();
			
			for(Opcion opcion:opciones){
				SelectItem item=new SelectItem(opcion.getIdopciones(), opcion.getNombre());
				this.itemsTiposMasa.add(item);
			}
			
		} catch (QueryException e) {
			// TODO Auto-generated catch block
			
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	public void consultarMateriasPrimas(ActionEvent evento){
		consultarMateriasPrimas();
	}
	


	private void consultarMateriasPrimas() {
		IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
		try {
			this.listaMateriasPrimas=new ArrayList<MateriaPrima>(0);
			this.listaMateriasPrimas=materiaPrimaFachada.consultarMateriasPrimas();
		} catch (QueryException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_MATERIAS_PRIMAS);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}


	/**
	 * @return the materiaPrima
	 */
	public MateriaPrima getMateriaPrima() {
		return materiaPrima;
	}


	/**
	 * @param materiaPrima the materiaPrima to set
	 */
	public void setMateriaPrima(MateriaPrima materiaPrima) {
		this.materiaPrima = materiaPrima;
	}


	/**
	 * @return the listaMateriasPrimas
	 */
	public List<MateriaPrima> getListaMateriasPrimas() {
		return listaMateriasPrimas;
	}


	/**
	 * @param listaMateriasPrimas the listaMateriasPrimas to set
	 */
	public void setListaMateriasPrimas(List<MateriaPrima> listaMateriasPrimas) {
		this.listaMateriasPrimas = listaMateriasPrimas;
	}


	/**
	 * @return the itemsTiposMasa
	 */
	public List<SelectItem> getItemsTiposMasa() {
		return itemsTiposMasa;
	}


	/**
	 * @param itemsTiposMasa the itemsTiposMasa to set
	 */
	public void setItemsTiposMasa(List<SelectItem> itemsTiposMasa) {
		this.itemsTiposMasa = itemsTiposMasa;
	}


	/**
	 * @return the editandoMateriaPrima
	 */
	public boolean isEditandoMateriaPrima() {
		return editandoMateriaPrima;
	}


	/**
	 * @param editandoMateriaPrima the editandoMateriaPrima to set
	 */
	public void setEditandoMateriaPrima(boolean editandoMateriaPrima) {
		this.editandoMateriaPrima = editandoMateriaPrima;
	}

}
